package controllers

import (
	"errmsg"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/validation"
	"smart_home/api/models"
)

type NotepadController struct {
	BaseController
}

// @Title 添加记事
// @param goods string true
// @param where string true
// @router / [post]
func (c *NotepadController) Post() {
	var (
		np   *models.Notepad
		err  error
		vali validation.Validation
	)

	np = models.NewNotepad()
	err = c.ParseData(np)
	if err != nil {
		logs.Error(err)
		c.Error(errmsg.ErrResponseParameter)
		return
	}

	np.UserId = c.User.Id
	vali = validation.Validation{}
	vali.Required(np.Goods, "goods").Message("需要存放的物品不能为空")
	vali.Required(np.Where, "where").Message("需要存放地方不能为空")
	if vali.HasErrors() {
		logs.Info(vali.Errors[0])
		c.Error(vali.Errors[0])
		return
	}

	if err = models.AddNotepad(np); err != nil {
		c.Error(err)
		return
	}

	c.Success(nil)
}

// @Title 修改记事
// @param id string true
// @param goods string true
// @param where string true
// @router /:id [put]
func (c *NotepadController) Put() {
	var (
		id   string
		np   *models.Notepad
		err  error
		vali validation.Validation
	)

	id = c.GetString(":id")
	if np, err = models.GetNotepadById(id); err != nil {
		c.Error(errmsg.ErrResponseSystem)
		return
	}
	if np == nil {
		c.Error(errmsg.ErrResponseFail)
		return
	}

	if err = c.ParseData(np); err != nil {
		logs.Error(err)
		c.Error(errmsg.ErrResponseParameter)
		return
	}

	vali = validation.Validation{}
	vali.Required(np.Goods, "goods").Message("需要存放的物品不能为空")
	vali.Required(np.Where, "where").Message("需要存放地方不能为空")
	if vali.HasErrors() {
		c.Error(vali.Errors[0])
		return
	}

	if err = models.UpdateNotepad(np); err != nil {
		c.Error(err)
		return
	}

	c.Success(nil)
}

// @Title 记事列表
// @param page int true
// @param row int true
// @router / [get]
func (c *NotepadController) GetAll() {
	var (
		ls   []*models.Notepad
		err  error
		page int
	)

	if page, err = c.GetInt("page", 1); err != nil {
		logs.Error(errmsg.ErrResponseParameter)
		c.Error(errmsg.ErrResponseParameter)
		return
	}

	if ls, err = models.GetAllNotepadByUid(c.User.Id, page); err != nil {
		c.Error(err)
		return
	}
	c.Success(ls)
}

// @Title 清除消息
// @router /:id [delete]
func (c *NotepadController) Delete() {
	var (
		id  string
		err error
	)
	id = c.GetString(":id")
	if err = models.DelNotepad(c.User.Id, id); err != nil {
		c.Error(err)
		return
	}
	c.Success(nil)
}
